package com.example.mybatisplus.web.controller;

import com.example.mybatisplus.mapper.AdminMapper;
import com.example.mybatisplus.model.domain.Student;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.example.mybatisplus.common.JsonResponse;
import com.example.mybatisplus.service.AdminService;
import com.example.mybatisplus.model.domain.Admin;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/api/admin")
public class AdminController {

    @Autowired
    private AdminService adminService;
    // 加了一层Service
    // 从controller发请求，调用处理请求的方法（sevice）->接口层，定义接口 -> 调用Mapper方法 -> MySQL -> 前端

    // 在springboot的默认情况下，controller的所有方法都会返回应一个视图（页面）
    // 现在作前后端分离开发，前端界面不在这里，我们只需要返回数据，不需要返回数据
    // 如果要返回数据，加上注解!!!!!


    // 发请求
    // 给方法加映射路径
    @RequestMapping("xx")
   //  @ResponseBody// 表示这个方法不再返回页面，而是返回数据
    public Admin hh(){
        // 写一个根据id查询用户
        Admin admin=adminService.getByIdMy(88);
        return admin;
    }


    // 发请求的同时要发参数
    // 3种
    // 1.get典型传参 url?x=y&a=b  直接用参数列表接  前端怎么传，后端怎么度，要求方法名与键名一致
    // 适用于前端传固定参数个数的情况
    @GetMapping("getById")
  //   @ResponseBody
    public Admin qq(Long id){
        return adminService.getById(id);
    }

    // 2.get典型传参 url?x=y&a=b  用对象接  要求对象的属性名和前端传的键名一致
    // 假如没有这样一个对象可以接收参数
    @GetMapping("getById1")
   //  @ResponseBody
    public JsonResponse qq1(Admin admin){
       //  Map<String,Object> map =new HashMap<>();
        Admin admin1=adminService.getById(admin.getId());
        // map.put("value",admin1);
       return JsonResponse.success(admin1);
       // return map;
    }
    //！！！！！！第一步调用处理请求方法，第二步包装进JsonResponse

    // 统一返回：必须返回统一的json数据      json:   {x:y, a:b}   eg.  map
    // 包装到map中返回
    //@GetMapping("getByIdCount")
    //@ResponseBody
    //public Map getByIdCount(Admin admin, Student s){
        //Map<String,Object> map =new HashMap<>();
        //map.put("value",0);
        //return map;
    //}

    // 3.post请求传参：   前后端分离开发中，post发送的是json数据
    // 后端必须用对象去接，要求是对象的属性名必须为json的键名，然后再将参数前加注解
    // 注解的作用：将json转为对象
    @PostMapping("login")
    public JsonResponse login(@RequestBody Admin admin){
        // login有值表示数据库有这个人，没值表示没有这个人

       Admin login= adminService.login(admin);
       return JsonResponse.success(login);
    }

    // restful风格：  4种情况：增删改查
    // 登陆的本质查询  注册的本质插入
    // 针对每个目的都有一种请求与之对应
    // 查询： get请求
    // 删除： delete请求
    // 修改、新增： post...
    //put和delete是对get和post的延申
}

